"""
example01 - 在设计函数的时候，函数的参数个数是暂时无法确定的

Python中的函数是一等函数（一等公民）
1、函数可以作为函数的参数
2、函数可以作为函数的返回值
3、函数可以赋值给变量

如果把函数作为函数的参数或者返回值，这种玩法通常称之为高阶函数。
通常使用高阶函数可以实现对原有函数的解耦合操作。

运算 - operate, 运算符 - operator

Lambda函数 ---> 没有名字而且一句话就能写完的函数，唯一的表达式就是函数的返回值

Author: Administrator
Date: 2024/1/22
"""
from operator import add, sub, mul


# fn ---> 一个实现二元运算的函数（可以做任意的二元运算）
# calculate ---> calc
def calc(*args, init_value=0, op, **kwargs):
    total = init_value
    for arg in args:
        if type(arg) in (int, float):
            total = op(total, arg)
    for value in kwargs.values():
        if type(value) in (int, float):
            total = op(total, value)
    return total


# def add(x, y):
#     return x + y
#
#
# def sub(x, y):
#     return x - y
#
#
# def mul(x, y):
#     return x * y


# print(calc(1, 2, 3, 4, op=add))
# print(calc(1, 2, 3, 4, init_value=1, op=mul))
# print(calc(1, 2, 3, 4, init_value=100, op=sub))
print(calc(1, 2, 3, 4, op=lambda x, y: x + y))
print(calc(1, 2, 3, 4, init_value=1, op=lambda x, y: x * y))
fn = lambda x, y: x - y
print(calc(1, 2, 3, 4, init_value=100, op=fn))


# lambda函數的用法
